package tp1.tests;

import tp1.arbolBmas.ArbolBmas;
import tp1.arbolBmas.nodo.Clave;
import tp1.arbolBmas.nodo.Hoja;
import tp1.arbolBmas.nodo.Nodo;
import tp1.arbolBmas.nodo.NodoIntermedio;
import tp1.arbolBmas.nodo.Raiz;
import tp1.arbolBmas.nodo.Tipo;
import tp1.arbolBmas.nodo.dato.Dato;
import tp1.arbolBmas.nodo.dato.DatoHoja;
import tp1.arbolBmas.nodo.dato.DatoNodoIntermedio;
import tp1.arbolBmas.nodo.dato.DatoRaiz;
import junit.framework.Assert;
import junit.framework.TestCase;

public class ArbolBmasTest extends TestCase {
	
	public void testAgregar() 
	{		
/*			Reproduzco el siguiente arbol
  
		 		    	  (a100)     ---- RAIZ
		 			     /      \
intermedioIzq ---	(a50)        (a180)   --- intermedioDer
		 			/	\        /    \
		 	 	(a7)  (a51) (a165)   (a400)   --- Hojas: e,f,g,h	 
*/
		ArbolBmas arbol = new ArbolBmas();
		
		//RAIZ
		arbol.agregar( new Raiz(new Clave("a100"), new DatoRaiz("a100"), null, null ) );
		
		Nodo intermedioIzq  = new NodoIntermedio( new Tipo(Tipo.HIJO_IZQUIERDO) , new Clave("a50") , new DatoNodoIntermedio("a50") ,null,null, null);
		Nodo intermedioDer  = new NodoIntermedio( new Tipo(Tipo.HIJO_DERECHO) , new Clave("a180") , new DatoNodoIntermedio("a180") ,null,null, null);

		arbol.agregar(intermedioIzq);
		arbol.agregar(intermedioDer);
		
		Nodo e = new Hoja( new Tipo(Tipo.HIJO_IZQUIERDO) , new Clave("a7") , new DatoHoja("a7") , null );
		Nodo f = new Hoja( new Tipo(Tipo.HIJO_DERECHO) , new Clave("a51") , new DatoHoja("a51") , null );
		Nodo g = new Hoja( new Tipo(Tipo.HIJO_IZQUIERDO) , new Clave("a165") , new DatoHoja("a165") , null );
		Nodo h = new Hoja( new Tipo(Tipo.HIJO_DERECHO) , new Clave("a400") , new DatoHoja("a400") , null );
			
		arbol.agregar(e);
		arbol.agregar(f);
		arbol.agregar(g);
		arbol.agregar(h);
		
		//VALIDACIONES
		assertTrue( arbol.getRaiz().getHijoIzquierdo().equals( intermedioIzq ) );
		assertTrue( arbol.getRaiz().getHijoDerecho().equals( intermedioDer ) );
		assertTrue( intermedioIzq.getPadre().equals( arbol.getRaiz() )  );
		assertTrue( intermedioDer.getPadre().equals( arbol.getRaiz() )  );
		
		assertTrue( intermedioIzq.getPadre().equals( arbol.getRaiz() )  );
		assertTrue( intermedioDer.getPadre().equals( arbol.getRaiz() )  );
		assertTrue( e.getPadre().equals( intermedioIzq )  );
		assertTrue( f.getPadre().equals( intermedioIzq )  );
		assertTrue( g.getPadre().equals( intermedioDer )  );
		assertTrue( h.getPadre().equals( intermedioDer )  );
		
	}

/*
	public void testArbolBmas() {
		fail("Not yet implemented");
	}

	public void testArbolBmasNodoConHijos() {
		fail("Not yet implemented");
	}

	public void testGetRaiz() {
		fail("Not yet implemented");
	}

	public void testSetRaiz() {
		fail("Not yet implemented");
	}

	public void testAgregar() {
		fail("Not yet implemented");
	}

	public void testEliminar() {
		fail("Not yet implemented");
	}

	public void testGetHijoDerecho() {
		fail("Not yet implemented");
	}

	public void testGetHijoIzquierdo() {
		fail("Not yet implemented");
	}

	public void testGetNodo() {
		fail("Not yet implemented");
	}

	public void testGetHojaParaInsertar() {
		fail("Not yet implemented");
	}

	public void testToString() {
		fail("Not yet implemented");
	}
*/
}
